﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using EvertonApp.Transporte;

namespace EvertonApp.Data
{
    class TestHilosRepository : IRepository<Hilo>
    {

        public static Usuario _usuario = new Usuario
                                      {
                                          IdUsuario = Guid.NewGuid(),
                                          Nombre = "Alfonso",
                                          Email = "conejo_alfonso@gmail.com",
                                          Password = "45678"
                                      };
           

        public static List<Hilo> _hilos = new List<Hilo> {
                                                    new Hilo {IdHilo = Guid.NewGuid(), Titulo = "Hilo1", Descripcion = "Primer Hilo", Editado = false, FechaCreacion = DateTime.Now, CreadoPor = _usuario, NumeroComentarios = 3},
                                                    new Hilo {IdHilo = Guid.NewGuid(), Titulo = "Hilo2", Descripcion = "Segundo Hilo", Editado = false, FechaCreacion = DateTime.Now, CreadoPor = _usuario, NumeroComentarios = 0}, 
                                                    new Hilo {IdHilo = Guid.NewGuid(), Titulo = "Hilo3", Descripcion = "Tercer Hilo", Editado = false, FechaCreacion = DateTime.Now, CreadoPor = _usuario, NumeroComentarios = 0}};


        #region Implementation of IRepository<hilo>

        public Hilo Insert(Hilo entity)
        {
            _hilos.Add(entity);
            entity.IdHilo = Guid.NewGuid();
            return entity;
        }

        public bool Delete(Hilo entity)
        {
            return _hilos.Remove(entity);
        }

        public bool Update(Guid id, Hilo entity)
        {
            Hilo hilo = _hilos.FirstOrDefault(o => o.IdHilo == id);
            if (hilo != null)
            {
                hilo.IdHilo = entity.IdHilo;
                hilo.Titulo = entity.Titulo;
                hilo.Descripcion = entity.Descripcion;
                hilo.CreadoPor = entity.CreadoPor;
                hilo.Editado = entity.Editado;
                hilo.FechaCreacion = entity.FechaCreacion;
            }else
            {
                return false;
            }
            return true;
        }

        public IQueryable<Hilo> SearchFor(Expression<Func<Hilo, bool>> predicate)
        {
            var collection = _hilos.AsQueryable();

            return collection.Where(predicate);
        }

        public IQueryable<Hilo> GetAll()
        {

            return _hilos.AsQueryable();
        }

        public Hilo GetById(Guid id)
        {
            return _hilos.Single(o => o.IdHilo == id);
        }

        #endregion
    }
}
